package com.one.pass.config;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/*
MyApplication类通过实现ApplicationContextAware接口，能够获取并保存Spring的ApplicationContext，
从而提供静态方法在任何地方获取Spring管理的Bean。
这在某些情况下非常有用，例如需要在非Spring管理的类中获取Spring Bean时。
*/

@Component
public class MyApplication implements ApplicationContextAware {
    // 用于存储Spring应用上下文的静态变量
    private static ApplicationContext applicationContext;

    // 通过类类型获取Spring管理的Bean
    public static <T> T getBean(Class<T> cls) {
        return applicationContext.getBean(cls);
    }

    // 通过Bean名称获取Spring管理的Bean
    public static <T> T getBean(String name) {
        return (T) applicationContext.getBean(name);
    }

    // 实现ApplicationContextAware接口的方法，获取并保存应用上下文
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        MyApplication.applicationContext = applicationContext;
    }
}
